<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <meta name="generator" content=
  "HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org">

  <title>C++ Sets</title>
  <link href="../cppreference.css" rel="stylesheet" type="text/css">
</head>

<body>
<table>
  <tr>
  <td>
  <div class="body-content">

  <div class="header-box">
    <a href="../index.html">cppreference.com</a> &gt; <a href=
    "index.html">C++ Sets</a>
  </div>

  <div class="name-format">
    begin
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  iterator begin();
  const_iterator begin() const;
</pre>

  <p>The function begin() returns an iterator to the first element of
  the set. begin() should run in <a href="../complexity.html">constant
  time</a>.</p>

  <p>For example, the following code uses begin() to initialize an
  iterator that is used to traverse a list:</p>
  <pre class="example-code">
   // Create a list of characters
   list&lt;char&gt; charList;
   for( int i=0; i &lt; 10; i++ ) {
     charList.push_front( i + 65 );
   }
   // Display the list
   list&lt;char&gt;::iterator theIterator;
   for( theIterator = charList.begin(); theIterator != charList.end(); theIterator++ ) {
     cout &lt;&lt; *theIterator;
   }            
</pre>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="end.html">end</a><br>
    <a href="rbegin.html">rbegin</a><br>
    <a href="rend.html">rend</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    clear
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  void clear();
</pre>

  <p>The function clear() deletes all of the elements in the set.
  clear() runs in <a href="../complexity.html">linear time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    (C++ Lists) <a href="../cpplist/erase.html">erase</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    Set constructors &amp; destructors
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  set();
  set( const set&amp; c );
  ~set();
</pre>

  <p>Every set has a default constructor, copy constructor, and
  destructor.</p>

  <p>The default constructor takes no arguments, creates a new instance
  of that set, and runs in <a href="../complexity.html">constant
  time</a>. The default copy constructor runs in <a href=
  "../complexity.html">linear time</a> and can be used to create a new
  set that is a copy of the given set <em>c</em>.</p>

  <p>The default destructor is called when the set should be
  destroyed.</p>

  <p>For example, the following code creates a pointer to a vector of
  integers and then uses the default set constructor to allocate a
  memory for a new vector:</p>
  <pre class="example-code">
 vector&lt;int&gt;* v;
 v = new vector&lt;int&gt;();           
</pre>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    (C++ Strings) <a href="../cppstring/resize.html">resize</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    Set operators
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  set operator=(const set&amp; c2);
  bool operator==(const set&amp; c1, const set&amp; c2);
  bool operator!=(const set&amp; c1, const set&amp; c2);
  bool operator&lt;(const set&amp; c1, const set&amp; c2);
  bool operator&gt;(const set&amp; c1, const set&amp; c2);
  bool operator&lt;=(const set&amp; c1, const set&amp; c2);
  bool operator&gt;=(const set&amp; c1, const set&amp; c2);
</pre>

  <p>All of the C++ containers can be compared and assigned with the
  standard comparison operators: ==, !=, &lt;=, &gt;=, &lt;, &gt;, and
  =. Performing a comparison or assigning one set to another takes
  <a href="../complexity.html">linear time</a>.</p>

  <p>Two sets are equal if:</p>

  <ol>
    <li>Their size is the same, and</li>

    <li>Each member in location i in one set is equal to the the member
    in location i in the other set.</li>
  </ol>

  <p>Comparisons among sets are done lexicographically.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    (C++ Strings) <a href="../cppstring/string_operators.html">String
    operators</a><br>
    (C++ Strings) <a href="../cppstring/at.html">at</a><br>
    (C++ Lists) <a href="../cpplist/merge.html">merge</a><br>
    (C++ Lists) <a href="../cpplist/unique.html">unique</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    count
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  <strong>size_type</strong> count( const <a href=
"../containers.html">key_type</a>&amp; key );
</pre>

  <p>The function count() returns the number of occurrences of
  <em>key</em> in the set.</p>

  <p>count() should run in <a href="../complexity.html">logarithmic
  time</a>.</p>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    empty
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  bool empty() const;
</pre>

  <p>The empty() function returns true if the set has no elements,
  false otherwise.</p>

  <p>For example, the following code uses empty() as the stopping
  condition on a (C/C++ Keywords) <a href=
  "../keywords/while.html">while</a> loop to clear a set and display
  its contents in reverse order:</p>
  <pre class="example-code">
 vector&lt;int&gt; v;
 for( int i = 0; i &lt; 5; i++ ) {
   v.push_back(i);
 }
 while( !v.empty() ) {
   cout &lt;&lt; v.back() &lt;&lt; endl;
   v.pop_back();
 }              
</pre>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="size.html">size</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    end
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  iterator end();
  const_iterator end() const;
</pre>

  <p>The end() function returns an iterator just past the end of the
  set.</p>

  <p>Note that before you can access the last element of the set using
  an iterator that you get from a call to end(), you&#39;ll have to
  decrement the iterator first.</p>

  <p>For example, the following code uses <a href=
  "begin.html">begin</a>() and end() to iterate through all of the
  members of a vector:</p>
  <pre class="example-code">
 vector&lt;int&gt; v1( 5, 789 );
 vector&lt;int&gt;::iterator it;
 for( it = v1.begin(); it != v1.end(); it++ ) {
   cout &lt;&lt; *it &lt;&lt; endl;
 }              
</pre>

  <p>The iterator is initialized with a call to <a href=
  "begin.html">begin</a>(). After the body of the loop has been
  executed, the iterator is incremented and tested to see if it is
  equal to the result of calling end(). Since end() returns an iterator
  pointing to an element just after the last element of the vector, the
  loop will only stop once all of the elements of the vector have been
  displayed.</p>

  <p>end() runs in <a href="../complexity.html">constant time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="begin.html">begin</a><br>
    <a href="rbegin.html">rbegin</a><br>
    <a href="rend.html">rend</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    equal_range
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  pair&lt;iterator, iterator&gt; equal_range( const <a href=
"../containers.html">key_type</a>&amp; key );
</pre>

  <p>The function equal_range() returns two iterators - one to the
  first element that contains <em>key</em>, another to a point just
  after the last element that contains <em>key</em>.</p>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    erase
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  void erase( iterator pos );
  void erase( iterator start, iterator end );
  <strong>size_type</strong> erase( const <a href=
"../containers.html">key_type</a>&amp; key );
</pre>

  <p>The erase function() either erases the element at <em>pos</em>,
  erases the elements between <em>start</em> and <em>end</em>, or
  erases all elements that have the value of <em>key</em>.</p>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    find
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  iterator find( const <a href=
"../containers.html">key_type</a>&amp; key );
</pre>

  <p>The find() function returns an iterator to <em>key</em>, or an
  iterator to the end of the set if <em>key</em> is not found.</p>

  <p>find() runs in <a href="../complexity.html">logarithmic
  time</a>.</p>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    insert
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  iterator insert( iterator i, const <a href=
"../containers.html">TYPE</a>&amp; val );
  void insert( <a href=
"../iterators.html">input_iterator</a> start, <a href=
"../iterators.html">input_iterator</a> end );
  pair&lt;iterator,bool&gt; insert( const <a href=
"../containers.html">TYPE</a>&amp; val );
</pre>

  <p>The function insert() either:</p>

  <ul>
    <li>inserts <em>val</em> after the element at <em>pos</em> (where
    <em>pos</em> is really just a suggestion as to where <em>val</em>
    should go, since sets and maps are ordered), and returns an
    iterator to that element.</li>

    <li>inserts a range of elements from <em>start</em> to
    <em>end</em>.</li>

    <li>inserts <em>val</em>, but only if <em>val</em> doesn&#39;t
    already exist. The return value is an iterator to the element
    inserted, and a boolean describing whether an insertion took
    place.</li>
  </ul>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    (C++ Maps) <a href="../cppmap/map_operators.html">Map operators</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    key_comp
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  key_compare key_comp() const;
</pre>

  <p>The function key_comp() returns the function that compares
  keys.</p>

  <p>key_comp() runs in <a href="../complexity.html">constant
  time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="value_comp.html">value_comp</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    lower_bound
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  iterator lower_bound( const <a href=
"../containers.html">key_type</a>&amp; key );
</pre>

  <p>The lower_bound() function returns an iterator to the first
  element which has a value greater than or equal to key.</p>

  <p>lower_bound() runs in <a href="../complexity.html">logarithmic
  time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="upper_bound.html">upper_bound</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    max_size
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  <strong>size_type</strong> max_size() const;
</pre>

  <p>The max_size() function returns the maximum number of elements
  that the set can hold. The max_size() function should not be confused
  with the <a href="size.html">size</a>() or (C++ Strings) <a href=
  "../cppstring/capacity.html">capacity</a>() functions, which return
  the number of elements currently in the set and the the number of
  elements that the set will be able to hold before more memory will
  have to be allocated, respectively.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="size.html">size</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    rbegin
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  <a href="../iterators.html">reverse_iterator</a> rbegin();
  const_<a href=
"../iterators.html">reverse_iterator</a> rbegin() const;
</pre>

  <p>The rbegin() function returns a <a href=
  "../iterators.html">reverse_iterator</a> to the end of the current
  set.</p>

  <p>rbegin() runs in <a href="../complexity.html">constant
  time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="begin.html">begin</a><br>
    <a href="end.html">end</a><br>
    <a href="rend.html">rend</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    rend
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  <a href="../iterators.html">reverse_iterator</a> rend();
  const_<a href="../iterators.html">reverse_iterator</a> rend() const;
</pre>

  <p>The function rend() returns a <a href=
  "../iterators.html">reverse_iterator</a> to the beginning of the
  current set.</p>

  <p>rend() runs in <a href="../complexity.html">constant time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="begin.html">begin</a><br>
    <a href="end.html">end</a><br>
    <a href="rbegin.html">rbegin</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    size
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  <strong>size_type</strong> size() const;
</pre>

  <p>The size() function returns the number of elements in the current
  set.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    (C++ Strings) <a href="../cppstring/capacity.html">capacity</a><br>
    <a href="empty.html">empty</a><br>
    (C++ Strings) <a href="../cppstring/length.html">length</a><br>
    <a href="max_size.html">max_size</a><br>
    (C++ Strings) <a href="../cppstring/resize.html">resize</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    swap
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  void swap( container&amp; from );
</pre>

  <p>The swap() function exchanges the elements of the current set with
  those of <em>from</em>. This function operates in <a href=
  "../complexity.html">constant time</a>.</p>

  <p>For example, the following code uses the swap() function to
  exchange the values of two strings:</p>
  <pre class="example-code">
   string first( &quot;This comes first&quot; );
   string second( &quot;And this is second&quot; );
   first.swap( second );
   cout &lt;&lt; first &lt;&lt; endl;
   cout &lt;&lt; second &lt;&lt; endl;          
</pre>

  <p>The above code displays:</p>
  <pre class="example-code">
   And this is second
   This comes first             
</pre>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    (C++ Lists) <a href="../cpplist/splice.html">splice</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    upper_bound
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  iterator upper_bound( const <a href=
"../containers.html">key_type</a>&amp; key );
</pre>

  <p>The function upper_bound() returns an iterator to the first
  element in the set with a key greater than <em>key</em>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="lower_bound.html">lower_bound</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>

  <div class="name-format">
    value_comp
  </div>

  <div class="syntax-name-format">
    Syntax:
  </div>
  <pre class="syntax-box">
  #include &lt;set&gt;
  value_compare value_comp() const;
</pre>

  <p>The value_comp() function returns the function that compares
  values.</p>

  <p>value_comp() runs in <a href="../complexity.html">constant
  time</a>.</p>

  <div class="related-name-format">
    Related topics:
  </div>

  <div class="related-content">
    <a href="key_comp.html">key_comp</a>
  </div>
  </div>
  </td>
  


  </tr>
  </table>
</body></html>
<hr>
</body></html>
